#!/usr/bin/env python
# encoding: utf-8
"""
@Author: Beam
@Mail:506556658@qq.com
@file: gevent_socket_server.py
@time: 2017/5/13 9:45
"""

import sys,time
import socket
import gevent

from gevent import socket,monkey
monkey.patch_all()

def server(port):
    s = socket.socket()
    s.bind(('0.0.0.0',port))
    s.listen(500)
    while True:
        cli,addr = s.accept()
        gevent.spawn(handle_request,cli)  #启动一个协程

def handle_request(cli):
    try:
        while True:
            data = cli.recv(1024)
            print("Recv",data)
            cli.send(data)
            if not data:
                cli.shutdown(socket.SHUT_WR)
                """
                使用shutdown来关闭socket的功能
                SHUT_RDWR：关闭读写，即不能使用send/write/recv/read等
                SHUT_RD：关闭读，即不能使用read/recv等
                SHUT_WR:关闭写功能，即不能使用send/write等
                除此之外，还将缓冲区中的内容清空
              """
    except Exception as e:
        print(e)
    finally:
        cli.close()

if __name__ == '__main__':
    server(8001)
